import { ElNotification, ElMessageBox } from 'element-plus'
import { h, defineComponent, createApp } from 'vue'
import AiChatWindow from '@/views/AiChatWindow.vue'
import ElementPlus from "element-plus";
import 'element-plus/dist/index.css'

/**
 * 用于标识当天是否已显示过 AI 提醒通知的本地存储键名
 */
const TODAY_KEY = 'ai_notification_shown_today'

/**
 * 用于标识用户选择今日不再显示提醒的本地存储键名
 */
const DONT_SHOW_TODAY_KEY = 'ai_notification_dont_shown_today'

/**
 * 打开 AI 对话窗口的通用方法
 *
 * 该方法会在页面中动态创建一个容器元素，并挂载 AiChatWindow 组件，
 * 同时监听组件关闭事件以卸载并移除 DOM 元素。
 */
export const openAiChatWindow = () => {
    const container = document.createElement('div')
    container.id = 'ai-chat-container'
    document.body.appendChild(container)

    const app = createApp(AiChatWindow, {
        modelValue: true,
        'onUpdate:modelValue': (val: boolean) => {
            if (!val) {
                app.unmount()
                document.body.removeChild(container)
            }
        }
    })
    app.use(ElementPlus)
    app.mount(container)
}

/**
 * 显示轮播形式的通知消息
 *
 * @param messages - 要展示的消息字符串数组，每条消息会依次弹出通知
 *
 * 该函数通过 Element Plus 的 Notification 实现消息轮播效果，
 * 并记录最后展示日期到 localStorage 防止重复提示。
 */
export const showAiNotifications = (messages: string[]) => {
    const today = new Date().toDateString()
    const lastShown = localStorage.getItem(TODAY_KEY)
    const dontShowToday = localStorage.getItem(DONT_SHOW_TODAY_KEY)
    if (lastShown === today || dontShowToday === today) return;

    messages.forEach((msg, index) => {
        setTimeout(() => {
            ElNotification({
                title: 'AI 助手提醒',
                message: h('div', { style: { cursor: 'pointer' } }, msg),
                duration: 5000,
                position: 'bottom-right',
                onClick: () => {
                    ElMessageBox.confirm(
                        '是否不再显示本日提醒？',
                        '取消',
                        {
                            confirmButtonText: '今日不再显示',
                            cancelButtonText: '取消',
                            type: 'info'
                        }
                    ).then(() => {
                        localStorage.setItem(DONT_SHOW_TODAY_KEY, today)
                        openAiChatWindow()
                    }).catch(() => {
                        openAiChatWindow()
                    })
                }
                //onClick: () => openAiChatWindow()
            })
        }, index * 7000) // 每条间隔 7 秒
    })
    localStorage.setItem(TODAY_KEY, today)
}

/**
 * 模拟从服务端获取 AI 提醒信息的方法（当前为模拟数据）
 *
 * @returns 返回一个 Promise，解析为包含提醒消息的字符串数组
 *
 * 当前实现返回固定示例数据，在实际使用中应替换为真实的 API 请求逻辑。
 */
export const fetchAiReminders = async (): Promise<string[]> => {
    // 示例：根据权限过滤
   const userRole = localStorage.getItem('role') || 'user'
    if (userRole !== 'admin') return [] // 仅 admin 可见
    const employees: EmployeeEvent[] = [
        { type: 'birthday', name: '张三', date: new Date(new Date().getFullYear(), 5, 16) },
        // { type: 'departure', name: '李四', date: new Date(new Date().getFullYear()), daysUntil: 3 }
        { type: 'departure', name: '王五', date: new Date(new Date().getFullYear(), 11, 20), daysUntil: 3 }
    ]

    const today = new Date()
    const reminders = []
    employees.forEach(event => {
        const timeDiff = event.date.getTime() - today.getTime()
        const daysUntil = Math.ceil(timeDiff / (1000 * 60 * 60 * 24))

        if (event.type === 'birthday' && daysUntil === 0) {
                reminders.push(`今天是 ${event.name} 的生日！🎉`)
            } else if (event.type === 'departure' && daysUntil <=7 && daysUntil >= 0) {
                 reminders.push(`${event.name} 将于 ${daysUntil} 天后离职，请处理交接。`)
        }
    })
      return reminders
    //console.log('today', today)
    //reminders.push('今天是 张三 的生日！🎉')
    //reminders.push('李四 将于 3 天后离职，请处理交接。')
    // if (today === 16) {
    //     reminders.push('今天是 张三 的生日！🎉')
    // }
    // if (today >= 16) {
    //     reminders.push('李四 将于 3 天后离职，请处理交接。')
    // }


   /* return [
        '今天是 张三 的生日！🎉',
        '李四 将于 3 天后离职，请处理交接。'
    ]*/
}
interface EmployeeEvent {
    type: 'birthday' | 'departure'
    name: string
    date: Date
    daysUntil?: number
}